Unity Addressable 预加载方案 您所在的位置:网站首页 unity addressable提前下载 Unity Addressable 预加载方案

Unity Addressable 预加载方案

2023-05-14 12:24| 来源: 网络整理| 查看: 265

Unity Addressable 预加载方案 Posted on 2021-11-12 Edited on 2023-05-10 In Unity

之前有一篇关于 Unity Addressable 文章介绍了一下它的概念和使用方式,使用它可以将Unity的资源进行拆分,将部分资源放到远程,在需要时再进行加载。

但是如果远程资源比较大的时候,我们可能需要预加载,以及在游戏启动时进行资源的检查和更新。

这篇博客简单记录下如何资源的检查和更新。

首先放上完整的代码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.AddressableAssets;using UnityEngine.AddressableAssets.ResourceLocators;using UnityEngine.ResourceManagement.AsyncOperations;using UnityEngine.UI;public class InitEnvironment : MonoBehaviour{ private AsyncOperationHandle downloadDependencies; private string str; private List _updateKeys; // Start is called before the first frame update void Start() { _updateKeys = new List(); UpdateCatalog(); } public async void UpdateCatalog() { str = ""; //开始连接服务器检查更新 await Addressables.InitializeAsync().Task; var handle = Addressables.CheckForCatalogUpdates(false); await handle.Task; Debug.Log("check catalog status " + handle.Status); ShowLog("check catalog status " + handle.Status); if (handle.Status == AsyncOperationStatus.Succeeded) { List catalogs = handle.Result; if (catalogs != null && catalogs.Count > 0) { foreach (var catalog in catalogs) { Debug.Log("catalog " + catalog); ShowLog("catalog " + catalog); } Debug.Log("download catalog start "); str += "download catalog start \n"; outputText.text = str; var updateHandle = Addressables.UpdateCatalogs(catalogs, false); await updateHandle.Task; foreach (var item in updateHandle.Result) { Debug.Log("catalog result " + item.LocatorId); ShowLog("catalog result " + item.LocatorId); foreach (var key in item.Keys) { Debug.Log("catalog key " + key); ShowLog("catalog key " + key); } _updateKeys.AddRange(item.Keys); } Debug.Log("download catalog finish " + updateHandle.Status); ShowLog("download catalog finish " + updateHandle.Status); DownLoad(); } else { Debug.Log("dont need update catalogs"); ShowLog("dont need update catalogs"); } } Addressables.Release(handle); } /// /// 主界面显示Log /// /// private void ShowLog(string textStr) { str += textStr + "\n"; outputText.text = str; } public IEnumerator DownAssetImpl() { var downloadsize = Addressables.GetDownloadSizeAsync(_updateKeys); yield return downloadsize; Debug.Log("start download size :" + downloadsize.Result); ShowLog("start download size :" + downloadsize.Result); if (downloadsize.Result > 0) { var download = Addressables.DownloadDependenciesAsync(_updateKeys, Addressables.MergeMode.Union);//, Addressables.MergeMode.Union yield return download; //await download.Task; Debug.Log("download result type " + download.Result.GetType()); ShowLog("download result type " + download.Result.GetType()); foreach (var item in download.Result as List) { var ab = item.GetAssetBundle(); Debug.Log("ab name " + ab.name); ShowLog("ab name " + ab.name); foreach (var name in ab.GetAllAssetNames()) { Debug.Log("asset name " + name); ShowLog("asset name " + name); } } Addressables.Release(download); } Addressables.Release(downloadsize); } /// /// 下载资源 /// public void DownLoad() { str = ""; StartCoroutine(DownAssetImpl()); }}

这段代码中有一个需要注意的点,就是如果不先InitializeAsync ,CheckForCatalogUpdates的返回值一定是的Count一定是0,也就是检查不出更新。

Post author: Ray Sun Post link: https://sunra.top/2021/11/12/unity-addressable-preload/ Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.

Welcome to my other publishing channels

RSS Unity 人物换装实现 DHCP 协议工作流程简介


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有